package com.shoping.web.component.other;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Controller;

/**
 * 这个接口也只有一个方法：run(String... args)，触发时机为整个项目启动完毕后，自动执行。
 * 如果有多个CommandLineRunner，可以利用@Order来进行排序。
 * <p>
 * 使用场景：用户扩展此接口，进行启动项目之后一些业务的预处理。
 */
@Slf4j
@Configuration
public class MyCommandLineRunner implements CommandLineRunner {

    @Autowired
    ApplicationContext applicationContext;

    @Override
    public void run(String... args) throws Exception {
        log.info("-----测试3【项目启动完毕】");
        log.info("==1==" + applicationContext.getBeanDefinitionCount());
        String[] beans = applicationContext.getBeanDefinitionNames();
        for (int i = 0; i < beans.length; i++) {
            Object o = applicationContext.getBean(beans[i]);
            Controller controller = AnnotationUtils.findAnnotation(o.getClass(), Controller.class);
            if (controller != null) {
                log.info("Controller==2==" + o.getClass().getName());
            }
        }
    }
}
